package com.icongyou.enterprise.talent_analysis.listener;

import com.icongyou.enterprise.talent_analysis.event.StudentDataUpdateEvent;
import com.icongyou.enterprise.talent_analysis.event.TemplateChangeEvent;
import com.icongyou.enterprise.talent_analysis.service.AIInsightCacheService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * AI洞察事件监听器
 * 监听学生数据更新和模板变更事件,自动触发AI洞察报告重新生成
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class AIInsightEventListener {
    
    private final AIInsightCacheService cacheService;
    
    /**
     * 监听学生数据更新事件
     * 使该学生的所有AI洞察缓存失效,下次访问时重新生成
     */
    @EventListener
    @Async("aiInsightTaskExecutor")
    public void handleStudentDataUpdate(StudentDataUpdateEvent event) {
        
        try {
            // 使该学生的所有AI洞察缓存失效
            cacheService.invalidateStudentCache(event.getStudentId());
            
        } catch (Exception e) {
        }
    }
    
    /**
     * 监听模板变更事件
     * 批量重新生成受影响学生的AI洞察报告
     */
    @EventListener
    @Async("aiInsightTaskExecutor")
    public void handleTemplateChange(TemplateChangeEvent event) {
        
        try {
            if (event.getAffectedStudentIds() != null && !event.getAffectedStudentIds().isEmpty()) {
                // 批量异步重新生成AI洞察
                cacheService.batchAsyncRegenerateInsights(
                    event.getAffectedStudentIds(),
                    event.getOldTemplateId(),
                    event.getNewTemplateId(),
                    event.getHrUserId()
                );
            } else {
                // 如果没有指定学生列表,只使旧模板缓存失效
                if (event.getOldTemplateId() != null) {
                    cacheService.invalidateTemplateCache(event.getOldTemplateId());
                }
            }
            
        } catch (Exception e) {
        }
    }
}
